#include <stdio.h>


#define MAXFILA 100
#define ERROFILACHEIA -1
#define ERROFILAVAZIA -2

typedef struct{
int dados[MAXFILA];
int ultimo;
}fila;

void InicializaFila();
int FilaCheia();
int FilaVazia();
int enfileirar(int dado);
int desenfileirar();
int ultimo();

fila aFila;

int main(){
int d0;
int op;

printf("Escolha a opção 0,1,2,3,4,5,6:\n");
scanf("%d",&op);
while(op!=6){
 switch(op){
  case 0:
         InicializaFila();
         break;
 case 1:
        printf("Fila Cheia: %d\n",FilaCheia() );
        break;
 case 2:
        printf("Fila Vazia: %d\n",FilaVazia() ); 
        break;
 case 3:
         printf("Digite dado a enfileirar:\n");
         scanf("%d",&d0);
         printf("enfileirar = %d\n",enfileirar(d0));
         printf("Ultimo = %d\n",aFila.ultimo);
         break;
 case 4:
         printf("desenfileirar = %d\n",desenfileirar());
         break;
 case 5:
         printf("Ultimo: %d\n",ultimo());
         break;
 case 6:
        break;
 default:
         break;
 }
 printf("Escolha a opção 0,1,2,3,4,5:\n");
 scanf("%d",&op); 
}

return 0;
}

void InicializaFila(){
aFila.ultimo = -1;
}

int FilaCheia(){
 if(aFila.ultimo == MAXFILA-1)
  return 1;
 else
  return 0;
}

int FilaVazia(){
 if(aFila.ultimo == -1)
  return 1;
 else
  return 0;
}

int enfileirar(int dado){
 if(FilaCheia())
  return(ERROFILACHEIA);
 else{
  aFila.ultimo=aFila.ultimo+1;
  aFila.dados[aFila.ultimo]=dado;
  return aFila.dados[aFila.ultimo];
 }
}

int desenfileirar(){
 int aux,i;
 if(FilaVazia())
  return(ERROFILAVAZIA);
 else{
  aux=aFila.dados[0];
  for(i=0;i<aFila.ultimo;i++){
   aFila.dados[i]=aFila.dados[i+1];
  }
  aFila.ultimo=aFila.ultimo-1;
  return aux;
 }
}

int ultimo(){
 if(FilaVazia()){
  printf("Fila Vazia!\n");
  return(ERROFILAVAZIA);
 }
 else{
  return aFila.dados[aFila.ultimo];
 } 
}
